package com.sumainfor.pc.market.controller.rentadviser;

import com.sumainfor.common.util.DateUtils;
import com.sumainfor.common.util.FieldCheckUtil;
import com.sumainfor.common.util.JsonResult;
import com.sumainfor.common.utlis.PageUtils;
import com.sumainfor.common.utlis.Pager;
import com.sumainfor.pc.market.dao.HousingMapper;
import com.sumainfor.pc.market.dao.RdTenantBlaMapper;
import com.sumainfor.pc.market.service.RdPactService;
import org.apache.commons.collections.MapUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import java.io.Serializable;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.*;

/**
 * @Date 2018年11月7日
 * @Describe 查询历史合同记录
 */
@RestController
@RequestMapping("/rentadviser/RdPactController")
public class RdPactController implements Serializable {
    Logger log = LoggerFactory.getLogger(RdPactController.class);// 日志
    @Autowired
    private RdPactService rdPactService;

    @Autowired
    private RdTenantBlaMapper blaMapper;

    @Autowired
    private HousingMapper housingMapper;

    /**
     * 查询用户的历史签约
     */
    @GetMapping("/getPactList")
    public JsonResult getPactList(@RequestParam Map<String,Object>params){
        JsonResult result=new JsonResult();
        List<Map<String,Object>> list=rdPactService.getPactList(params);
        if (list!=null){
            result.put(list);
        }else{
            result.putFailed("服务器繁忙");
        }
        return result;
    }
    /**
     * 发起签约时查询客户已签约的合同
     */
    @GetMapping("/getPactListByTenId")
    public JsonResult getPactListByTenId(@RequestParam Map<String,Object>params){
        JsonResult result=new JsonResult();
        List<Map<String,Object>> list=rdPactService.getPactListByTenId(params);
        if (list!=null){
            result.put(list);
        }else{
            result.putFailed("服务器繁忙");
        }
        return result;
    }
    /**
     * 由后台发起的签约
     * @param params
     * @return
     */
    @PostMapping("/addPact")
    public JsonResult addPact(@RequestBody Map<String,Object> params){
        System.out.println("开始走签约的fangfa ");
        JsonResult result=new JsonResult();
        //取出TenId, 去查询该租客是否是黑名单租客
        Map<String, Object> data = (Map<String, Object>) params.get("data");
        String tenId = (String) data.get("TenId");
        Integer blackOrNotByTenId = blaMapper.getIsBlackOrNotByTenId(tenId);
        //如果该租客是黑名单租客, 直接返回, 不能发起签约
        if (blackOrNotByTenId > 0) {
            result.putSuccess("黑名单租客不能发起签约");
            return result;
        }

        Map<String,Object> dataMap=(Map<String,Object>)params.get("data");//获取合同的数据
        if(dataMap.get("PaRearMonthPrice")!=null &&  dataMap.get("PaActMonthPrice")!=null){
            params.putAll(dataMap);
            if(MapUtils.getInteger(params,"SenSend")>0){
                try {
                    SimpleDateFormat a = new SimpleDateFormat("yyyy-MM-dd");
                    String EndTimeOne = MapUtils.getString(params,"EndTime");
                    Date dateOne = a.parse(EndTimeOne);
                    Date dateTwo = DateUtils.addDateMonths(dateOne,MapUtils.getInteger(params,"SenSend"));
                    String zz = a.format(dateTwo);
                 params.put("EndTime",zz);
                } catch (ParseException e) {
                    e.printStackTrace();
                }

            }

            //活动后月租金
            int paRearMonthPrice=Integer.parseInt(dataMap.get("PaRearMonthPrice").toString());
            //实际签约租金
            int paActMonthPrice=Integer.parseInt(dataMap.get("PaActMonthPrice").toString());
            //如果签约租金小于活动后月租金
            if (paActMonthPrice>=paRearMonthPrice){
                //不需要服务中心尽量审核的
                System.out.println("params:"+params);
                result=rdPactService.addPact(params);
            }else{
                //需要服务中心尽量审核的
                System.out.println("params:"+params);
                result=rdPactService.addPactExamine(params);
            }
        }else{
            result.putFailed("服务器繁忙");
            log.info("参数不完整:活动后租金和实际签约租金不完整");
        }
        return result;
    }
    /**
     *查询我的签约列表
     */
    @GetMapping("/getPactListById")
    public JsonResult getPactListById(@RequestParam Map<String,Object>params, Pager pager){
        JsonResult result=new JsonResult();
        pager.setPagerNecessary(params, pager);
        PageUtils pageUtils = new PageUtils();
        Integer cout=rdPactService.getPactListCountById(params);
        if(cout==0){
            return pageUtils.getJsonResult(new ArrayList<Map<String,Object>>(), params,cout);
        }
        List<Map<String,Object>>getCommunityList=rdPactService.getPactListById(params);
        result=pageUtils.getJsonResult(getCommunityList, params, cout);
        return result;
    }
    /**
     * 运营部服务管家查询账单中心的房源信息
     *
     * @param params
     * @return
     */
    @PostMapping("/key/getHoPactList")
    public JsonResult getHoPactList(@RequestBody Map<String, Object> params) {
        System.out.println("接收到的参数:" + params);
        JsonResult result = new JsonResult();
        List<Map<String, Object>> list = rdPactService.getHoPactList(params);
        if (list != null) {
            result.put(list);
        } else {
            result.putFailed("服务器繁忙");
        }
        return result;
    }

    /**
     *运营部服务管家查询房源配置变更列表, 查询全部的退房申请
     */
    @PostMapping("/getHouConPactList")
    public JsonResult getHouConPactList(@RequestBody Map<String,Object>params){
        JsonResult result=new JsonResult();
        Pager pager=new Pager();
        pager.setPageno(Integer.parseInt(params.get("pageno").toString()));
        pager.setPagesize(Integer.parseInt(params.get("pagesize").toString()));
        pager.setPagerNecessary(params, pager);
        PageUtils pageUtils = new PageUtils();
        //根据项目楼号室号做筛选
        if(FieldCheckUtil.isMapFieldNotNull(params ,new String[]{"ComId"})){
            List<String> houseIdList = housingMapper.getHouseIdListByBuildAndRoom(params);
            if (houseIdList != null && houseIdList.size() > 0) {
                params.put("houseIdList", houseIdList);
            }
        }

        Integer cout=rdPactService.getHouConPactListCount(params);
        if(cout==0){
            return pageUtils.getJsonResult(new ArrayList<Map<String,Object>>(), params,cout);
        }
        List<Map<String,Object>>getCommunityList=rdPactService.getHouConPactList(params);
        result=pageUtils.getJsonResult(getCommunityList, params, cout);
        return result;
    }
    /**
     *租赁顾问输入房源编号的时候查询该套房以及签约的水燃收费标准
     */
    @GetMapping("/getWgMeter")
    public JsonResult getWgMeter(@RequestParam Map<String,Object>params){
        JsonResult result=new JsonResult();
        return result.put(rdPactService.getWgMeter(params));
    }
    /**
     *运营部服务管家退租的时候根据房源编号和合同开始时间查询入住期间是否有新租客入住
     */
    @GetMapping("/getPactByTimeHouId")
    public JsonResult getPactByTimeHouId(@RequestParam Map<String,Object>params){
        JsonResult result=new JsonResult();
        Map<String,Object> map=new HashMap<String,Object>();
        List<Map<String,Object>> dataList=rdPactService.getPactByTimeHouId(params);
        Integer dataCount=rdPactService.getPactByTimeHouIdCount(params);
        if(dataList!=null && dataCount!=null){
            map.put("dataList",dataList);
            map.put("dataCount",dataCount);
        }else{
            result.putFailed("服务器繁忙");
        }
        return result.put(map);
    }
    /**
     *运营部服务秘书审核账单通过后修改合同信息 审核通过
     */
    @PostMapping("/key/updatePactForSe")
    public JsonResult updatePactForSe(@RequestBody Map<String,Object>params){
        return rdPactService.updatePactForSe(params);
    }
    /**
     *运营部服务秘书审核账单通过后修改合同信息 审核不通过
     */
    @PostMapping("/key/updatePactForSeNo")
    public JsonResult updatePactForSeNo(@RequestBody Map<String,Object>params){
        return rdPactService.updatePactForSeNo(params);
    }
    /**
     *租赁顾问 根据租客的编号查询租客的历史签约条数
     */
    @GetMapping("/getPactCountByTenId")
    public JsonResult getPactCountByTenId(@RequestParam Map<String,Object>params){
        return rdPactService.getPactCountByTenId(params);
    }
    /**
     *运营部服务秘书审核账单通过后修改合同信息 审核不通过
     */
    @PostMapping("/key/getHouPactApplyList")
    public JsonResult getHouPactApplyList(@RequestBody Map<String,Object>params){
        JsonResult result=new JsonResult();
        List<Map<String,Object>> list=rdPactService.getHouPactApplyList(params);
        if (list!=null){
            result.put(list);
        }else{
            result.putFailed("服务器繁忙");
        }
        return result;
    }
    /**
     *运营部服务秘书审核账单通过后修改合同信息 审核不通过
     */
    @PostMapping("/key/updatePactRent")
    public JsonResult updatePactRent(@RequestBody Map<String,Object>params){
        return rdPactService.updatePactRent(params);
    }
    /**
     * 查询合同的换房信息、转租信息
     */
    @PostMapping("/key/getRdPactTrade")
    public JsonResult getRdPactTrade(@RequestBody Map<String,Object>params){
        return rdPactService.getRdPactTrade(params);
    }
    /**
     * 查询合同的换房信息、转租信息
     */
    @GetMapping("/getRdPactTenList")
    public JsonResult getRdPactTenList(@RequestParam Map<String,Object>params){
        return rdPactService.getRdPactTenList(params);
    }
    /**
     *智能设备充值 查询租客所租的房子智能设备余额的和
     */
    @GetMapping("/getRdCensusHouConList")
    public JsonResult getRdCensusHouConList(@RequestParam Map<String,Object>params){
        return rdPactService.getRdCensusHouConList(params);
    }
    /**
     *续租客端签合同的时候查询合同的信息
     */
    @GetMapping("/key/getRdRenPactInfo")
    public JsonResult getRdRenPactInfo(@RequestParam Map<String,Object>params){
        return rdPactService.getRdRenPactInfo(params);
    }
    /**
     *租客端续签合同时 房屋账单支付完成后修改合同信息
     */
    @PostMapping("/key/updatePactByRent")
    public JsonResult updatePactByRent(@RequestBody Map<String,Object>params){
        return rdPactService.updatePactByRent(params);
    }
    /**
     *租后主管的租客管理查询续租租客列表
     */
    @GetMapping("/getRdRenewalTenList")
    public JsonResult getRdRenewalTenList(@RequestParam Map<String,Object>params, Pager pager){
        JsonResult result=new JsonResult();
        pager.setPagerNecessary(params, pager);
        PageUtils pageUtils = new PageUtils();
        Integer cout=rdPactService.getRdRenewalTenListCount(params);
        if(cout==0){
            return pageUtils.getJsonResult(new ArrayList<Map<String,Object>>(), params,cout);
        }
        List<Map<String,Object>>getCommunityList=rdPactService.getRdRenewalTenList(params);
        result=pageUtils.getJsonResult(getCommunityList, params, cout);
        return result;
    }
    /**
     *租后主管的租客管理查询续租租客列表
     */
    @PostMapping("/key/getRdRenewalTenInfoList")
    public JsonResult getRdRenewalTenInfoList(@RequestBody Map<String,Object>params){
        return rdPactService.getRdRenewalTenInfoList(params);
    }

}
